package writtenTraining.day19;

import java.util.*;

/**
 * day19:(1)模拟 + 数学：WY3 小易的升级之路
 */
public class Main {
    // 模拟 + 数学
    
    public static void main(String[] args) {   
        // 输入
        Scanner in = new Scanner(System.in);
        while(in.hasNext()) {
            int n = in.nextInt(), c = in.nextInt();
            for(int i = 0; i < n ; i++) {
                int bi = in.nextInt();
                if(bi > c) {
                   c +=  getCom(c, bi);
                } else {
                    c += bi;
                }
            }


            System.out.println(c);
        }
    }

    // 求最大公约数
    private static int getCom(int num1 , int num2) {
        // 辗转取模法
        int tar = num1 % num2;
        while(tar != 0) {
            num1 = num2;
            num2 = tar;
            tar = num1 % num2;
        }

        return num2;
    }

}

/**
 * day19:(2)动态规划 + 路径问题:JZ47 礼物的最大价值
 */


 class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param grid int整型二维数组
     * @return int整型
     */
    public int maxValue (int[][] grid) {
        // 动态规划 + 路径问题

        // 创建dp
        int row = grid.length;
        int col = grid[0].length;
        int[][] dp = new int[row + 1][col + 1];
        // 初始化
        // 填表
        for(int i = 1; i <= row; i++) {
            for(int j = 1; j <= col; j++) {
                dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1])
                        + grid[i-1][j-1];
            }
        }
        // 返回值
        return dp[row][col];
    }
}

/**
 * day19:(3):双指针 + 哈希：对称之美
 */

 class Main2 {

    public static void main(String[] args) {
//         双指针 + 哈希

        Scanner in = new Scanner(System.in);
        int k = in.nextInt();
        while(k-- > 0) {
//              输入
            int n = in.nextInt();  
            // 哈希统计
            boolean[][] hash = new boolean[n][26];
            String[] s = new String[n];
            for(int i = 0; i < n; i++) {
                char[] chs = in.next().toCharArray();
//                 出现就置为 true
                for(int j = 0; j < chs.length; j++) {
                    hash[i][chs[j] - 'a'] = true;
                }
            }


            int left = 0, right = n - 1;
            while(left <= right) {
//                 开始遍历每一个字母
                int i = 0;
                for(; i < 26; i++) {
                    if(hash[left][i] && hash[right][i]) {
//                         如果都出现，就跳出本次循环
                        break;
                    }
                }
                if(i >= 26) {
                    break;
                }
//                 调整
                left++;
                right--;

            }

//             输出结果
            if(left > right)
//                 如果完成遍历说明能找到
                System.out.println("Yes");
            else
                System.out.println("No");

        }

    }
}